// Copyright Epic Games, Inc. All Rights Reserved.

#pragma once

#include "Engine/DataAsset.h"

#include "LyraPawnData.generated.h"

#define UE_API LYRAGAME_API

class APawn;
class ULyraAbilitySet;
class ULyraAbilityTagRelationshipMapping;
class ULyraCameraMode;
class ULyraInputConfig;
class UObject;

/**
 * ULyraPawnData
 *
 *	包含用于定义Pawn的属性的不可变数据资产。
 */
UCLASS(MinimalAPI, BlueprintType, Const, Meta = (DisplayName = "Lyra Pawn Data", ShortTooltip = "Data asset used to define a Pawn."))
class ULyraPawnData : public UPrimaryDataAsset
{
	GENERATED_BODY()

public:

	/**
	 * 构造函数
	 */
	UE_API ULyraPawnData(const FObjectInitializer& ObjectInitializer);

public:

	// 为此Pawn实例化的类（通常应派生自ALyraPawn或ALyraCharacter）。
	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Lyra|Pawn")
	TSubclassOf<APawn> PawnClass; // Pawn类

	// 授予此Pawn能力系统的能力集。
	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Lyra|Abilities")
	TArray<TObjectPtr<ULyraAbilitySet>> AbilitySets; // 能力集

	// 此Pawn采取行动时使用的能力标签映射
	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Lyra|Abilities")
	TObjectPtr<ULyraAbilityTagRelationshipMapping> TagRelationshipMapping; // 标签关系映射

	// 玩家控制的Pawn用于创建输入映射和绑定输入操作的输入配置。
	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Lyra|Input")
	TObjectPtr<ULyraInputConfig> InputConfig; // 输入配置

	// 玩家控制的Pawn使用的默认相机模式。
	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Lyra|Camera")
	TSubclassOf<ULyraCameraMode> DefaultCameraMode; // 默认相机模式
};

#undef UE_API